package com.bawei.livedata;

import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;

/**
 liveData特点：
 1。一般和viewmodel结合使用
 2。感知到数据发生改变，自动更新UI，观察者模式（Observer观察者，livedata被观察者）
 3。感知activity的生命周期：只有当activity处于活跃状态的时候



 liveData方法：
 1。setValue：设置数据 主线程设置数据，不安全的
 2。getValue：获得数据
 3。postValue：设置数据 子线程设置数据，安全的，源码中使用synchronized上锁

 面试问题：setValue和postValue有甚么区别呢？


 */
public class MainActivity extends AppCompatActivity {
    private MyViewModel mMyViewModel;
    private TextView mTextView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mTextView = findViewById(R.id.tv);
        mMyViewModel = new ViewModelProvider(this).get(MyViewModel.class);
        //感知livedata数据发生改变  observe：订阅关系
        mMyViewModel.getNum().observe(this, new Observer<Integer>() {
            @Override
            public void onChanged(Integer integer) {
                Log.d("ytx", "数据发生改变了: ");
                mTextView.setText(integer+"");
            }
        });
        
    }
        
    public void plus(View view) {
        //获得livedata中的数据+1
        int num = mMyViewModel.getNum().getValue()+1;
        mMyViewModel.getNum().setValue(num);
        //子线程设置新的数据
        new Thread(new Runnable() {
            @Override
            public void run() {
                mMyViewModel.getNum().postValue(num);
            }
        }).start();


//        mMyViewModel.num++;
        //为textView添加文本
//        mTextView.setText(mMyViewModel+"");
    }
}